home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 12 / Cream of the Crop 12 (Part II) / Cream of the Crop 12 (Part II).iso / OS2 / VD08DOC1.ZIP / usr / lib / book / tools.inf (.txt) < prev    next >
Encoding:
OS/2 Help File  |  1996-02-14  |  281.7 KB  |  1,835 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Abstract ΓòÉΓòÉΓòÉ
  3.  
  4. This manual is the user's manual for the tools shipped with the Objective C PM 
  5. and database class libraries. Here you can find information on the utility 
  6. programs designed to support the application programmer in writing OS/2 PM 
  7. programs and programs accessing DBase III database files. 
  8.  
  9. If you are searching for specific information concerning 
  10.  
  11.      Installation ... Read the Installation Manual. 
  12.      Basics of Application development ... Read the appropriate sections in 
  13.       the Tutorial. There you can find a gentle introduction into using this 
  14.       library package for developing OS/2 PM applications. 
  15.      Classes and Methods provided by the library ... You can find special 
  16.       information about the provided classes and methods in the Reference 
  17.       Manual. 
  18.      A reference on the supported Actions, Commands and Outlets ... see 
  19.       Appendix cha:actions-outlets in this manual. 
  20.      The Database Editor Utility, the Project Editor or the Interface Editor 
  21.       ... This information can be found in this manual. 
  22.      Literature ... Look in the Literature section of the Tutorial. 
  23.  
  24.  
  25. ΓòÉΓòÉΓòÉ 2. Introduction ΓòÉΓòÉΓòÉ
  26.  
  27. In addition to the libraries for OS/2 PM and database programming, some tools 
  28. are required to fully utilize these packages or to simplify application 
  29. development. 
  30.  
  31. This manual is an attempt to document the programs shipped together with the 
  32. library package. These programs are Project Editor, Interface Editor, Database 
  33. Editor and two auxiliary programs called Console and DBView. 
  34.  
  35. To simplify the development process at this time, I recommend, you get some 
  36. simple tools as listed below: 
  37.  
  38.    1. Some kind of make program. I recommend using GNU make. This program is 
  39.       free and quite powerful. You can get it on hobbes.nmsu.edu and many other 
  40.       locations in the Internet where OS/2 software is stored. This program can 
  41.       also be found on the Hobbes CD produced by Walnut Creek. 
  42.  
  43.       A program called make is assumed to exist in some directory listed in 
  44.       your PATH statement. Project Editor will automatically start it when 
  45.       compiling and linking your applications. 
  46.    2. A good programmer's editor. My personal preference is GNU Emacs. It can 
  47.       be found in the same places as shown above for GNU make. A special mode 
  48.       for editing Objective C programs---for editing interface files as well as 
  49.       for editing implementation files---is provided in \usr\lib\site-lisp. 
  50.    3. If you are not content with the features the Interface Editor application 
  51.       provides, you should use a "normal" dialog editor. To simply create 
  52.       dialog windows by drag and drop, you should use a dialog editor which is 
  53.       capable of writing resource definition files (.rc) or binary resource 
  54.       files (.res). A quite good dialog editor can be found as part of the OS/2 
  55.       developer's toolkit (IBM). Another possibility is to use Guidelines. When 
  56.       using Guidelines, you have to patch the resource definition files 
  57.       manually to use standard window classes (instead of WC_GUI* just use 
  58.       WC_*). 
  59.  
  60.       Always keep in mind, that---although a "normal" dialog editor might 
  61.       provide more well-suited for creating your dialog objects at the moment, 
  62.       the Interface Editor program does provide some additional features as 
  63.       e.g. creating instances of your custom classes and connecting the 
  64.       objects. The Interface Editor will be extended in the future to be a 
  65.       full-featured dialog editor by its own. 
  66.    4. A compiler capable of creating on-line help files (.hlp) and online books 
  67.       (.inf). Such a program is also part of the OS/2 developer's toolkit from 
  68.       IBM. This one converts files written in a special tag language (ipf) to 
  69.       online help or book files. 
  70.  
  71.       You will only need such a program if you plan to provide on-line help 
  72.       with your programs or if you want to ship documentation in a format 
  73.       readable by the OS/2 program View (.inf). 
  74.  
  75.  
  76. ΓòÉΓòÉΓòÉ 2.1. Current Status of this Manual ΓòÉΓòÉΓòÉ
  77.  
  78. You will already have noticed, that this manual is a bit small for a visual 
  79. development suite as shipped together with the Objective C library package. 
  80.  
  81.                                     Caution!
  82.  
  83. This manual is currently "under construction". I will try to describe the 
  84. development tools at least briefly, but do not expect every feature---or in 
  85. some cases "bug"---to be documented clearly. 
  86.  
  87. In most cases, the programs should be self-explanatory, and I will try to 
  88. document most non-trivial program-functions here. 
  89.  
  90. For an introduction into using the development tools, see the Tutorial 
  91. document. There creating an application using the visual development tools 
  92. Project Editor and Interface Editor is shown. 
  93.  
  94. For now this documentation must be sufficient. If you have any questions, feel 
  95. free to cantact me via E-Mail. 
  96.  
  97.  
  98. ΓòÉΓòÉΓòÉ 3. Project Editor---Managing the Files in Your Project ΓòÉΓòÉΓòÉ
  99.  
  100. The core of the development tools shipped together with the OS/2 Objective 
  101. library package is a program called Project Editor. This application is used to 
  102. manage the files your project consists of, e.g. the header files, your classes' 
  103. implementation files and the make file. 
  104.  
  105. This chapter will provide a short description of the program itself and will 
  106. show what and how you can configure this application program to match your 
  107. personal preferences. 
  108.  
  109.  
  110. ΓòÉΓòÉΓòÉ 3.1. Purpose of the Application ΓòÉΓòÉΓòÉ
  111.  
  112. The Project Editor application was designed to simplify the task of file 
  113. management while developing a project. On the one hand it will manage the 
  114. header files, class implementation files and resource scripts for you; on the 
  115. other hand you can visually design new Objective C classes used in your 
  116. application program and generate a skeleton source code for these classes. 
  117. Additionally, the "Makefile" is created automatically and the actions of 
  118. compiling and testing your program can be handled from the Project Editor 
  119. program itself. 
  120.  
  121. To make use of the Project Editor you must create a so-called project when 
  122. starting to develop an application. For every project a directory will be 
  123. created on your disk containing all necessary files, e.g. the source code and 
  124. the user interface definitions. 
  125.  
  126. A project consists of 
  127.  
  128.      a project description and the project's name, 
  129.      some settings required to compile and link the application program, e.g. 
  130.       the name of the executable file and the libraries your program makes use 
  131.       of, 
  132.      user interface definition files which you create visually using the 
  133.       Interface Editor program, 
  134.      resource scripts for the application resources not stored in user 
  135.       interface definition files as created by the Interface Editor. 
  136.      a definition of all custom classes (The term custom class refers to 
  137.       classes not provided by the library package) including their instance 
  138.       methods (actions) and instance variables (outlets), and the source code 
  139.       files, 
  140.      the Objective C interface declarations for your custom classes along with 
  141.      the class implementation files. 
  142.  
  143.  Every other file your application program will require at run-time should also 
  144.  be put into the project directory. 
  145.  
  146.  The Project Editor is some kind of control center concerning the development 
  147.  process; you can invoke text-editor programs to edit the source code files, 
  148.  you can compile and even test your programs by simply choosing one of the 
  149.  items in the pull-down menus. 
  150.  
  151.  In addition to the files you edit using external programs, e.g. the interface 
  152.  or implementation files or the user interface definitions, the Project Editor 
  153.  will create two data files storing 
  154.  
  155.      the definitions of the custom classes your application program makes use 
  156.       of. This data is stored in the file "pb.cls" in your project's root 
  157.       directory, and 
  158.      the global settings for the project itself. Data concerning the position 
  159.       and size of the project window, project settings as the name of the 
  160.       executable file and the libraries you wish to use are stored in the data 
  161.       file "pb.prj". 
  162.  
  163.  
  164. ΓòÉΓòÉΓòÉ 3.2. Starting the Project Editor Program ΓòÉΓòÉΓòÉ
  165.  
  166. After you have started the Project Editor, a window alike the one depicted in 
  167. Figure * will be shown. 
  168.  
  169.  
  170.  
  171.  
  172. Log window of the Project Editor application as displayed on startup
  173.  
  174. The application itself simply consists of a notebook control and a menu bar 
  175. with two pull-down menus File (see Figure *) and Compile as shown in Figure *. 
  176.  
  177.  
  178. ΓòÉΓòÉΓòÉ 3.3. Configuring the Project Editor for the First Time ΓòÉΓòÉΓòÉ
  179.  
  180. Global configuration data for the Project Editor is stored in a binary 
  181. configuration file named "PB.INI". It is located in the directory where the 
  182. executable file "pb.exe" resides an will be created automatically when you 
  183. start the application for the first time. 
  184.  
  185. In this configuration file some global data will be stored. This includes 
  186.  
  187.      The size and position of the main window of the Project Editor when 
  188.       started without a project already loaded and 
  189.      configuration data concerning the external programs used for editing the 
  190.       various files. 
  191.  
  192.  
  193.  
  194.  
  195.   Settings page concerning the external programs used forediting the various data files
  196.  
  197.  Before using the program to develop your own applications, you should first 
  198.  tell the Project Editor which applications you want to use for editing your 
  199.  source code files. On the left-most page of the Project Editor's notebook---as 
  200.  depicted in Figure *---you can enter the names and command line arguments for 
  201.  the programs used for editing 
  202.  
  203.      your classes' implementation files, 
  204.      the interface definitions of your classes and other header files, 
  205.      the resource script files which shall be compiled with the resource 
  206.       compiler and linked to your application program and 
  207.      all other source code files, e.g. C source code containing external 
  208.       functions your program makes use of. 
  209.  
  210.  To tell the Project Editor to use some external program when editing one of 
  211.  these special files just enter the name and the arguments when starting the 
  212.  external program in the appropriate entry field. When editing a file, this 
  213.  program will be started passing one more parameter, the absolute path name of 
  214.  the file to be edited consisting of the drive, the path and the file name 
  215.  where it is located. 
  216.  
  217.  After making these settings, save the data to the configuration file by 
  218.  choosing the item Save Preferences from the File menu. 
  219.  
  220.  
  221. ΓòÉΓòÉΓòÉ 3.4. A Description of the Menus ΓòÉΓòÉΓòÉ
  222.  
  223. In the File menu you can find menu items to load or save project data, start a 
  224. new project, to edit the classes in your project and to exit the application. 
  225. This pull-down menu is depicted in Figure *. 
  226.  
  227.  
  228.  
  229.  
  230. File menu of the Project Editor
  231.  
  232. The second pull-down menu the Project Editor application provides is labelled 
  233. with Compile. In this menu, as shown in Figure *, you can find menu items 
  234. concerning compilation and running the application program you are developing. 
  235.  
  236.  
  237.  
  238.  
  239. Compile menu of the Project Editor
  240.  
  241.      Build will compile and link the application program. The executable file 
  242.       as set on the linker page of your project will be created in the project 
  243.       directory. 
  244.      The menu item Debug will recompile all class implementation files which 
  245.       have been changed and will preserve debug-information usable by the GNU 
  246.       Debugger "gdb". An executable file containing debug-code called 
  247.       "debug.exe" will be created in the project directory. It is recommended 
  248.       to remove the object files before creating an executable file used for 
  249.       debugging using File/Clean. 
  250.      Clean will remove all object files and the executable files from the 
  251.       project directory. The term object files also refers to the binary 
  252.       resource files created with the resource compiler. In addition all 
  253.       temporary files ending in a tilde ( ) will be deleted. 
  254.      The item Abort will stop the compilation process or kill your application 
  255.       if it was started using File/Run. When stopping the compilation process, 
  256.       a damaged object file is likely to exist, so it is recommended to remove 
  257.       all object files after aborting compilation. 
  258.      Run will start the application program to let you test your project. 
  259.       Before it will be recompiled if any changes were made since the last time 
  260.       the executable file was created. 
  261.  
  262.  While compiling or running the application, the output of the programs---make 
  263.  while compiling or your application when running---will be displayed on the 
  264.  Log page of the project notebook. 
  265.  
  266.  The two devices stdout and stderr are redirected to this notebook page (see 
  267.  Figure *). This means, that you can use these two devices for debugging output 
  268.  which will automatically be displayed when your program is started from within 
  269.  the Project Editor application. Simply use fprintf(stderr,...) to print 
  270.  debugging output to the Project Editor's window. 
  271.  
  272.  Project Editor will use an external program for compiling and linking your 
  273.  applications. You have to install some make program, e.g. GNU make found on 
  274.  hobbes.nmsu.edu. The program is expected to be located in some directory 
  275.  listed in your PATH variable and is expected to be called make.exe. 
  276.  
  277.  The make program must support the -C option to specify the working directory 
  278.  for compiling, linking and the "Makefile" itself. 
  279.  
  280.  If the make subprocess exits with an error saying that there are too many open 
  281.  files in your environment and you are using a program depending on the emx 
  282.  libraries, you should increase the global file limit by setting the 
  283.  corresponding flag in the EMXOPT variable. To allow a maximum of 255 open 
  284.  files at once, put the line 
  285.  
  286.     SET EMXOPT=-h255
  287.  
  288.  into your "config.sys". make will not be able to find the project directory if 
  289.  you set a default drive to be used for absolute pathnames starting with a 
  290.  slash. Be sure not to set the -r* option for the EMXOPT variable. 
  291.  
  292.  
  293. ΓòÉΓòÉΓòÉ 3.5. Editing Global Project Settings ΓòÉΓòÉΓòÉ
  294.  
  295. Before starting work on a new project you will have to set some data necessary 
  296. for compilation and linking the executable file you wish to produce. 
  297.  
  298.  
  299.  
  300.  
  301. The project's linker settings page
  302.  
  303. To set up your project, turn the Project Editor's notebook pages to the one 
  304. whose tab is labelled with Linker. This page is displayed in Figure *. In the 
  305. entry field to the right of Executable: you will have to specifiy the name of 
  306. the executable file you wish to create. For example you could enter "prog.exe" 
  307. there resulting in the program to be called "prog.exe" when compiling. 
  308.  
  309. In the Libraries section of this page you can check or uncheck two boxes 
  310. labelled with PM Library and DBase Library. If in checked state, the 
  311. Presentation Manager library "objcpm.a" or the database library "objcdb.a" will 
  312. be linked to your application program. The library file "objcutil.a" will 
  313. always be linked to the executable file. In the entry field below you can 
  314. specify additional linker options, e.g. enter -lobjects to add the library file 
  315. "objects.a" to the list of files linked to your program. 
  316.  
  317. If the check box control Multithreaded is checked, the linker flag -Zmt will be 
  318. specified when linking the application causing the multi-threaded versions of 
  319. the libraries to be used if existing. Dynamic linking will cause the C library 
  320. to be linked dynamically with your program. In this case the dynamic link 
  321. library "emx.dll" will be required by your program. 
  322.  
  323. The two buttons at the bottom will allow you to generate a "Makefile" or a new 
  324. main implementation file called "Main.m". You should never change these two 
  325. files by hand because these changes will be overwritten the next time the files 
  326. are generated. 
  327.  
  328.  
  329.  
  330.  
  331. Global project settings
  332.  
  333. You must generate a new "Makefile" after you changed some of the settings on 
  334. this notebook page. Before, you should save the project by choosing File/Save 
  335. from the application's menu. 
  336.  
  337. The page next to this linker settings page is labelled with Project settings. 
  338. On this page, as can be seen in Figure *, you can specify the project's title 
  339. as a string and a number of lines shortly describing the project. This data 
  340. will be inserted into some of the automatically generated files. 
  341.  
  342.  
  343. ΓòÉΓòÉΓòÉ 3.6. Adding Files to Your Project ΓòÉΓòÉΓòÉ
  344.  
  345. At the moment only 
  346.  
  347.      Objective C class implementation files, 
  348.      header files and Objective C class interface files and 
  349.      custom C source code files and resource scripts 
  350.  
  351.  are managed by the Project Editor application. 
  352.  
  353.  In addition to creating implementation and interface files as will be 
  354.  described in Section sec:create-classes on Page sec:create-classes you can 
  355.  simply add already existing source code files by dragging them from a folder 
  356.  object on the Workplace Shell to the appropriate notebook page in the project 
  357.  window. 
  358.  
  359.  Objective C class implementation files and other Objective C source code files 
  360.  having the suffix ".m" can be dropped on the first Objects page labelled with 
  361.  Files---Classes. 
  362.  
  363.  The second page is reserved for header files having the file extension ".h", 
  364.  on the third page you can drop C source code files (extension ".c") and 
  365.  resource scripts (extension ".rc"). You can drop more than one file onto one 
  366.  of these pages at once. 
  367.  
  368.  
  369. ΓòÉΓòÉΓòÉ 3.7. Editing Files ΓòÉΓòÉΓòÉ
  370.  
  371. All source code files managed by the Project Editor will be displaced with 
  372. their icons on the appropriate Objects pages. 
  373.  
  374. To start editing one of the files, simply double-click on the icon using the 
  375. first mouse button. The Project Editor will automatically invoke the external 
  376. (text) editor program you specified for files of this type (see the global 
  377. settings displayed in Figure *) and the file will be loaded. 
  378.  
  379.  
  380. ΓòÉΓòÉΓòÉ 3.8. Creating Custom Classes and Generating Source Code ΓòÉΓòÉΓòÉ
  381.  
  382. One of the most interesting features of the Project Editor application is its 
  383. ability to create custom Objective C classes for use in your project. Adding 
  384. and deleting classes or editing a classes' interface declaration where action 
  385. methods (action methods are special instance methods having a single parameter 
  386. called sender being a pointer to the sending object and a return value of type 
  387. id being a pointer to the receiving object in case the method could be executed 
  388. successfully or nil otherwise) and outlet variables (instance variables of type 
  389. id are called outlets. These are normally used to store pointers to other 
  390. objects providing services for your object). 
  391.  
  392.  
  393.  
  394.  
  395. Dialog window used for editing information concerningyour application's custom classes
  396.  
  397. To start editing a class interface declaration or create new classes choose 
  398. Edit Classes from the File menu. This menu item---as well as most others 
  399. concerning the project's data files---cannot be selected before a project 
  400. directory has been created by saving the project data for the first time. The 
  401. dialog window which is displayed by the Project Editor in response to this menu 
  402. item is shown in Figure *. 
  403.  
  404. On the top of the window you can see two entry field controls labelled with 
  405. Name and Superclass. The left entry field really is a combo box only displaying 
  406. its list after the downwards pointing arrow to the right is pressed. In this 
  407. list all custom classes known by the Project Editor for this project are 
  408. displayed. 
  409.  
  410. Below three groups are displayed, each of them consisting of a combination box 
  411. and three buttons to add, change or delete items in the list above. 
  412.  
  413. The leftmost group is concerned with the selected classes' action methods, the 
  414. middle one is used to edit data concerning the outlet instance variables. The 
  415. group on the right margin can be used to add, delete or edit another kind of 
  416. instance variables called commands. You should not care to edit instance 
  417. variables of this kind now, this will make only sense when developing user 
  418. interface classes you can edit using the Interface Editor. These special 
  419. instance variables of type Command are used to store a target-action binding 
  420. from a user-interface element to a specific action method of a target object. 
  421. The data type is defined in "<pm/os2types.h>". 
  422.  
  423. On the bottom you can find some buttons to create new classes, to change a 
  424. classes name or superclass or to delete a class. Additionally you can press 
  425. Unparse to generate a interface declaration and a skeletonal implementation 
  426. file for the currently selected class in your project directory. Close Window 
  427. will let you close the (modal) dialog window. 
  428.  
  429. To add a new class, enter the name of the class in the entry field on top 
  430. labelled with Name. The push the New Class button on the bottom of the dialog 
  431. window. Immediately a new class will be created having no action methods, no 
  432. outlets and no command instance variables. The superclass is set to Object if 
  433. not specified otherwise before pressing New Class. 
  434.  
  435. Using Change Class you can change the global data (name and superclass) of the 
  436. currently selected class; Delete Class will remove the selected class from 
  437. memory. 
  438.  
  439. To add an action, an outlet or a command, type the name of the action 
  440. (outlet/command) in the entry field on top of the the appropriate combination 
  441. box and press the Add button in the group the combo box control is in. Change 
  442. will change the definition of the currently action (outlet/command) to the 
  443. definition displayed in the entry field. 
  444.  
  445. The names of action methods must end in a colon (:), the Project Editor will 
  446. automatically add the parameter sender on its own when generating the source 
  447. code files. To define an action method called -anAction: sender simply add 
  448. anAction: to the list of actions. 
  449.  
  450. When generating source code files using Unparse you will be prompted to confirm 
  451. overwriting already existing files. Overwriting will cause all changes you made 
  452. to the source code files by hand obsolete. Normally you should not press 
  453. Unparse after already editing a source code file. Simply modify the header file 
  454. for the class and its implementation file by hand. 
  455.  
  456. The name of the header file created by Unparse consists of the classname and a 
  457. suffix of ".h". Implementation files are created by adding ".m" to the name of 
  458. the class. Be careful when installing the package on a FAT drive, you will not 
  459. prompted in case creating the file failed. 
  460.  
  461. To clarify this, assume you are creating a class called Controller. Unparse 
  462. will create an interface declaration for Controller in a file called 
  463. "Controller.h" and a skeletonal implementation in "Controller.m". You are 
  464. prompted if you wish to insert the two files into your project. The next time 
  465. you generate a "Makefile" some lines will be inserted to make sure the 
  466. implementation file of the class Controller, "Controller.m", is compiled and 
  467. the object file "Controller.o" is linked to your application program. 
  468.  
  469.  
  470. ΓòÉΓòÉΓòÉ 3.9. Interacting with the Interface Editor program ΓòÉΓòÉΓòÉ
  471.  
  472. The class definition file you create using the Project Editor will be used by 
  473. the Interface Editor application. Using this program you can graphically create 
  474. instances of your custom classes and connect them with various objects, e.g. 
  475. with user interface elements as buttons. The Interface Editor will 
  476. automatically read in the file "pb.cls" in the directory the interface file is 
  477. located. 
  478.  
  479. At the moment the Interface Editor will not notice any change in the class 
  480. declarations you make using the Project Editor while the interface files 
  481. concerned by these modifications are already loaded. To update the information 
  482. the Interface Editor stores (in memory) about your project's custom classes you 
  483. can choose File/Reload Classes from the menu in your interface file's main 
  484. window. 
  485.  
  486.  
  487. ΓòÉΓòÉΓòÉ 4. Interface Editor---Creating Your Program's User Interface ΓòÉΓòÉΓòÉ
  488.  
  489. The Interface Editor is used to create the user interface of your programs. In 
  490. addition to that you can create instances of your project's classes and some 
  491. frequently used objects, e.g. a Printer object or a Help object. 
  492.  
  493. An introduction into using the program itself can be found in the Tutorial. 
  494. This chapter will only provide a brief overview of the program itself and 
  495. explain most of the features. 
  496.  
  497.  
  498. ΓòÉΓòÉΓòÉ 4.1. What Is Edited ΓòÉΓòÉΓòÉ
  499.  
  500. Basically, this program enables you to create objects of any kind in an easy to 
  501. understand way. You can create user interface objects (windows, buttons,...) as 
  502. well as non-visible objects (printer objects,...). The data is stored in a 
  503. so-called interface file. 
  504.  
  505. More exactly, the data is stored in an Objective C Typed Stream, a mechanism 
  506. available for storing objects. The objects are divided into two kinds, 
  507.  
  508.      instances of your own classes, and 
  509.      instances of pre-defined classes. 
  510.  
  511.  Instances of your own classes are not really stored as objects in an interface 
  512.  file. Only a reference (the name of the class and the title of the object) are 
  513.  stored. These objects are then not unloaded by the runtime library using the 
  514.  -read: and -awake methods but created from scratch via +alloc and initialized 
  515.  using -init. Every initialization for your classes should be done in the -init 
  516.  method. 
  517.  
  518.  After a user-defined object is created, the special method 
  519.  -awakeFromInterfaceFile is called, if implemented by the object's class. At 
  520.  the time this method is called, all connections between the object and the 
  521.  "rest of the world" are guaranteed to exist. So this is the method, you should 
  522.  put any initialization depending on other objects in the interface file. 
  523.  
  524.  Instances of pre-defined classes are unarchived using the standard methods 
  525.  -read: and -awake. You should not care too much about these methods, these are 
  526.  implemented correctly for the pre-defined classes and will perform as 
  527.  expected. The objects are just created and set up as they were within the 
  528.  Interface Editor program. 
  529.  
  530.  The objects and the connections are bundled together to a single instance of 
  531.  the class InterfaceFile. This class guarantees that every object is created 
  532.  and initialized as expected. Loading of an interface file is discussed in 
  533.  Section sec:interface-file-loading. 
  534.  
  535.  
  536. ΓòÉΓòÉΓòÉ 4.2. Limitations ΓòÉΓòÉΓòÉ
  537.  
  538. At the moment you can only create instances of the following window classes: 
  539.  
  540.      CheckBox and AutoCheckBox 
  541.      ComboBox 
  542.      Container 
  543.      EntryField 
  544.      ListBox 
  545.      MainWindow 
  546.      MultiLineEntryField 
  547.      NoteBook 
  548.      PushButton 
  549.      RadioButton and AutoRadioButton 
  550.      ScrollBar 
  551.      Static 
  552.      StdDialog 
  553.      StdWindow and 
  554.      TriStateButton and AutoTriStateButton. 
  555.  
  556.  Additionally, you can instantiate the classes 
  557.  
  558.      Help and 
  559.      Printer 
  560.  
  561.  and create objects of self-defined classes. 
  562.  
  563.  Support for other user interface classes will be added in the next version, 
  564.  just as well as editing more of the so-called Presentation Parameters of the 
  565.  window objects. For now you can only edit the most common parameters and 
  566.  specify a custom font for the windows. 
  567.  
  568.  There is no way to create menus and icons using this program. For this you 
  569.  have to write a resource file as is e.g. described in the Tutorial. 
  570.  
  571.  
  572. ΓòÉΓòÉΓòÉ 4.3. Starting the Program ΓòÉΓòÉΓòÉ
  573.  
  574. When starting the Interface Editor program you will see the main window of the 
  575. application. This window, as is depicted in Figure *, consists of a menu bar 
  576. and a container object. 
  577.  
  578.  
  579.  
  580.  
  581. Main window of the Interface Editor application
  582.  
  583. In the container object all non-user interface objects and all instances of 
  584. MainWindow, StdDialog and StdWindow will be represented as an icon. 
  585.  
  586.  
  587.  
  588.  
  589. Dialog window used to create instances of user-defined classes
  590.  
  591. From the View menu, you can cause the other windows of the application to be 
  592. displayed. These are needed to instantiate user-defined classes (see Figure *), 
  593. to create user interface objects (Figure *) and to edit the properties of an 
  594. object, as shown in Figure *. 
  595.  
  596.  
  597.  
  598.  
  599. Tools palette of the Interface Editor
  600.  
  601.  
  602.  
  603.  
  604. Preferences window used to change the settings of userinterface and non-user interface objects
  605.  
  606. For practical purpose, you should always let the Tools window (Figure *) and 
  607. the Preferences window be displayed on screen. In addition to the main window, 
  608. these are the most frequently used windows in the application. 
  609.  
  610. All three of the Palette, the Preferences window and the Classes dialog are 
  611. non-modal dialog windows. They can---and in case of the Palette and the 
  612. Preferences window also should---always been displayed on screen. These three 
  613. windows are shared among all interface files currently open; every interface 
  614. file is represented by its own main window. 
  615.  
  616.  
  617. ΓòÉΓòÉΓòÉ 4.4. Customization ΓòÉΓòÉΓòÉ
  618.  
  619. The Interface Editor will try to read a system configuration file called 
  620. "ib.ini" on startup. In this configuration file, 
  621.  
  622.      the positon, size and the font used for the main window are stored. 
  623.       Additionally, 
  624.      the position of the Tools window (often referred as the Palette) and 
  625.      the position and size of the Preferences window will be remembered and 
  626.       saved. Of course, this also applies to 
  627.      the position of the Classes window. 
  628.  
  629.  The settings can be saved by clicking on Save on the last page displayed in 
  630.  the Preferences window. 
  631.  
  632.  Normally, the configuration file "ib.ini" resides in the application directory 
  633.  \usr\bin\PM. 
  634.  
  635.  
  636.  
  637.  
  638.   Global Preferences page of the Preferences window
  639.  
  640.  In addition to the positions of the single windows, the visibility state of 
  641.  every window is also stored. So if Palette and Preferences are displayed when 
  642.  saving the settings, these windows will automatically shown when the 
  643.  application is started the next time. 
  644.  
  645.  On the Global Preferences page shown in Figure * of the Preferences window you 
  646.  can also set the horizontal and vertical raster for positioning and sizing the 
  647.  user interface elements within a window or dialog. If you set the horizontal 
  648.  raster to 2 and the vertical raster to 4 this means, that the objects can only 
  649.  be aligned to positions (x/y), where x is a multiple of 2 and y is a multiple 
  650.  of 4. This also applies to the size of the objects. 
  651.  
  652.  To change these settings, enter the horizontal and/or vertical raster in the 
  653.  entry fields labelled hoizontal raster respectively vertical raster. You must 
  654.  press Change to make the settings known to the program for the current 
  655.  session; to save the settings permanently, press Save. 
  656.  
  657.  
  658. ΓòÉΓòÉΓòÉ 4.5. Adding Objects ΓòÉΓòÉΓòÉ
  659.  
  660. Starting here a distinction between the objects represented by an icon in the 
  661. main window and the so-called additional (user interface) objects is made. The 
  662. term (user interface) object will refer to an object that is represented in the 
  663. main window. Additional (user interface) objects are objects just being part of 
  664. some other object, e.g. a button in a window. 
  665.  
  666. Creating "normal" objects is accomplished by either 
  667.  
  668.      creating an instance of MainWindow, StdDialog or MainWindow by clicking 
  669.       on the appropriate buttons Main, Dialog or Window in the Palette or by 
  670.      instantiating a custom (user-defined) class using the Classes dialog or 
  671.       by 
  672.      choosing Help Object or Printer Object from the Create menu in the main 
  673.       window to create an instance of Help respectively Printer. 
  674.  
  675.  Each of these objects is represented by an icon in the main window and has a 
  676.  title. The title can be changed using the OS/2 direct manipulation features 
  677.  for direct editing of a text. This title string is used to uniquely identify 
  678.  the objects. 
  679.  
  680.  
  681. ΓòÉΓòÉΓòÉ 4.6. Adding Additional User Interface Objects ΓòÉΓòÉΓòÉ
  682.  
  683. These so-called additional user interface objects are created by clicking on 
  684. the corresponding button controls in the Palette. The following table will list 
  685. the button text and the class an instance is created of when the button is 
  686. clicked. 
  687.  
  688. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  689. ΓöéButton Text         ΓöéClass Name                              Γöé
  690. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  691. ΓöéWindows/Dialog      ΓöéStdDialog                               Γöé
  692. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  693. ΓöéWindows/Window      ΓöéStdWindow                               Γöé
  694. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  695. ΓöéWindows/Static      ΓöéStatic                                  Γöé
  696. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  697. ΓöéButtons/Check       ΓöéAutoCheckBox or                         Γöé
  698. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  699. Γöé                    ΓöéCheckBox                                Γöé
  700. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  701. ΓöéButtons/Radio       ΓöéAutoRadioButton or                      Γöé
  702. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  703. Γöé                    ΓöéRadioButton                             Γöé
  704. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  705. ΓöéButtons/3State      ΓöéAutoTriStateButton or                   Γöé
  706. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  707. Γöé                    ΓöéTriStateButton                          Γöé
  708. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  709. ΓöéButtons/Push        ΓöéPushButton                              Γöé
  710. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  711. ΓöéEntry/Normal        ΓöéEntryField                              Γöé
  712. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  713. ΓöéEntry/MLE           ΓöéMultiLineEntryField                     Γöé
  714. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  715. ΓöéListbox/Combo       ΓöéComboBox                                Γöé
  716. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  717. ΓöéListbox/Normal      ΓöéListBox                                 Γöé
  718. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  719. ΓöéScrollbar/horiz.    ΓöéScrollBar                               Γöé
  720. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  721. ΓöéScrollbar/vertical  ΓöéScrollBar                               Γöé
  722. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  723. ΓöéContainer           ΓöéContainer                               Γöé
  724. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  725. ΓöéNotebook            ΓöéNoteBook                                Γöé
  726. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  727.  
  728.  
  729. ΓòÉΓòÉΓòÉ 4.7. Sizing and Moving User Interface Objects ΓòÉΓòÉΓòÉ
  730.  
  731. There are two possible ways to set the size and/or the position of a user 
  732. interface object. 
  733.  
  734.  
  735.  
  736.  
  737. Window Dimensions page for user interface objects
  738.  
  739. First, you can "manually" enter the desired size and/or position of the object 
  740. within its parent window on the Window Dimensions page of the Preferences 
  741. window (see Figure * . After doing so you should press Change on this page to 
  742. actually perform the changes. 
  743.  
  744. The other, the more intuitive and simpler way is to just change the position of 
  745. an additional user interface object by dragging the object while holding down 
  746. mouse button 2. Depressing button 2 while the pointer is over a window object 
  747. will cause the object to "follow" the mouse pointer. As soon as you release the 
  748. mouse button, the object will be "dropped" at its new position. 
  749.  
  750.  
  751.  
  752.  
  753. Two entry field objects in a dialog window. Theobject on top is selected.
  754.  
  755. To change the size of an additional user interface object you have to first 
  756. select the object by clicking the first mouse button while the pointer is over 
  757. the object. Immediately, a border will be drawn around the object (as is shown 
  758. in Figure *). Moving the pointer to the edges of the border you can see the 
  759. pointer shape change to double arrows pointing into some direction. Pressing 
  760. button 1 and dragging while the arrow pointer is visible will cause the object 
  761. to be resized dynamically. As soon as you release button 1 the object will 
  762. adjust to its new size. Some user interface objects, e.g. instances of 
  763. Container or MultiLineEntryField will cause problems with redrawing themselves 
  764. while resizing. If you experienced a slightly damaged window, just deselect the 
  765. window and select it once more to cause a "clean redraw". 
  766.  
  767. Moving "normal" user interface objects, such as dialog windows is done by 
  768. dragging them using their title bar. If you have disabled the title bar, just 
  769. enable it again, then change the position of the window and remove the title 
  770. bar in the end. 
  771.  
  772. To change the size of a window, you have to change its border type to 
  773. resizable. Then you can resize it as any resizable window on the desktop. 
  774.  
  775.  
  776. ΓòÉΓòÉΓòÉ 4.8. Removing Objects ΓòÉΓòÉΓòÉ
  777.  
  778. Removing objects is done by selecting their icon in the main window and 
  779. choosing Delete Object from the Edit menu. You can also press the Delete key on 
  780. your keyboard as a short-cut for this menu item. 
  781.  
  782. If the object you want to remove is connected to other objects, you will be 
  783. warned of this and have to confirm the delete action. 
  784.  
  785. Be careful when deleting objects, because there is no undo function at the 
  786. moment. 
  787.  
  788.  
  789. ΓòÉΓòÉΓòÉ 4.9. Removing Additional User Interface Objects ΓòÉΓòÉΓòÉ
  790.  
  791. Additional user interface objects are removed by selecting the object you want 
  792. to delete (see Figure * for a picture of a selected object) and the press the 
  793. Delete key on your keyboard. If the object is not connected to other objects, 
  794. it is deleted immediately. Otherwise, you will be warned of this fact and have 
  795. to confirm the this action. 
  796.  
  797.  
  798. ΓòÉΓòÉΓòÉ 4.10. Changing Presentation Parameters for User Interface Objects ΓòÉΓòÉΓòÉ
  799.  
  800. In contrast to most dialog editors available now, the scope of the Interface 
  801. Editor application is quite limited when the "presentation parameters" of an 
  802. object are concerned. At the moment it is only possible to change the font 
  803. (font and size) of any user interface object. 
  804.  
  805. To set the font of a user interface object start the Font Palette application 
  806. in your System Setup folder and drag the desired font (using button 2) to the 
  807. object you want to change. By simply dropping a font on the object the font 
  808. change will be performed. This font will be stored to the interface file when 
  809. saving the data. 
  810.  
  811. You can inspect the name and size of the font on the page labelled with Window 
  812. Dimensions in the Preferences window. An entry of the form s.n is used to 
  813. denote that the object uses a font called n at size s point. E.g. the entry 
  814.  
  815. 12.Courier 
  816.  
  817. means that the object uses a Courier font at 12 point for display of its data. 
  818.  
  819. To remove the special font information from a user interface object, press 
  820. Reset on the Window Dimensions page (see Figure *). Thereafter the object will 
  821. be displayed using the default font for this kind of window object. 
  822.  
  823.  
  824. ΓòÉΓòÉΓòÉ 4.11. Editing Preferences of Objects ΓòÉΓòÉΓòÉ
  825.  
  826. This section will try to explain which settings you can change using the 
  827. Preferences window. At the moment this description is very short. For most of 
  828. the flags you can set or unset, only the corresponding flags specified at 
  829. object creation time are referenced. Have a look at the appropriate sections in 
  830. the Reference Manual to find out what these flags are used for and how the look 
  831. and feel of the object is influenced by them. 
  832.  
  833. Before starting a complete description of the single Preferences windows, some 
  834. general notes must be made. 
  835.  
  836. Every user interface object, or seen in a more abstract way, every instance of 
  837. a class derived from Window do have three things in common: 
  838.  
  839.    1. Every window object has a title. This title can be edited in the first of 
  840.       the preference pages. 
  841.    2. In addition to that, a user interface object can store an integer value 
  842.       called the window's tag. This value can be quite useful to distinguish 
  843.       windows, or to add some numeric data. Just as the window title, this 
  844.       value is displayed and can be edited on the first page. 
  845.    3. At last, every window has a presentation manager identifier, denoted by 
  846.       ID in the preferences window. This identifier can normally be ignored by 
  847.       the developer; it must be adjusted only in cases where resources should 
  848.       be automatically associated with the window object (e.g. a menu resource 
  849.       for an instance of StdWindow). 
  850.  
  851.  Changes to the settings of an object made with a radio button or a check box 
  852.  control are normally performed immediately. Only changes to the settings made 
  853.  in an entry field, as e.g. changes to the window title, must be acknowledged 
  854.  by the user by pressing the button labelled with Change on the corresponding 
  855.  preferences page. 
  856.  
  857.  
  858. ΓòÉΓòÉΓòÉ 4.11.1. "StdDialog" ΓòÉΓòÉΓòÉ
  859.  
  860. Instances of the class StdDialog, which are created using the button Dialog in 
  861. the Palette can be influenced by changing the settings on two different 
  862. preferences pages. 
  863.  
  864.  
  865.  
  866.  
  867. First preferences page for dialog windows
  868.  
  869. The first page, as depicted in Figure *, is used to change the global settings 
  870. (dialog title, window tag, etc.) and to set some flags. 
  871.  
  872. The radio buttons and check boxes on this page correspond to the dialog window 
  873. creation flags as 
  874.  
  875. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  876. ΓöéTitle               ΓöéFlag                Γöé
  877. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  878. ΓöéBorder/none         Γöé---                 Γöé
  879. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  880. ΓöéBorder/normal       ΓöéFCF_BORDER          Γöé
  881. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  882. ΓöéBorder/Dialog       ΓöéFCF_DLGBORDER       Γöé
  883. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  884. ΓöéBorder/resizable    ΓöéFCF_SIZEBORDER      Γöé
  885. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  886. ΓöéMenu                ΓöéFCF_MENU            Γöé
  887. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  888.  
  889. Checking Visible on startup causes the dialog window to be displayed 
  890. automatically when the interface file is loaded. The dialog is run non-modal 
  891. (using -makeKeyAndOrderFront:). This also applies to instances of StdWindow and 
  892. MainWindow. 
  893.  
  894.  
  895.  
  896.  
  897. Reordering items in a dialog window, a main window or astandard window
  898.  
  899. To change the ordering of the child windows of the dialog window, click on 
  900. Reorder. This causes a modal dialog window as depicted in Figure * to be 
  901. displayed. 
  902.  
  903. The upper list in this dialog window represents the current ordering of the 
  904. user interface objects in the dialog window. Using the two buttons Delete and 
  905. Add you can move the selected object from the upper list (Add) to the lower 
  906. list or vice versa (Delete). The ordering is set by pressing Apply. 
  907.  
  908. When selecting Apply while the list at the top is not empty, the items there 
  909. are appended to the list at the bottom in the same ordering they have in the 
  910. top list. 
  911.  
  912.  
  913.  
  914.  
  915. Second preferences page for dialog windows
  916.  
  917. The second preferences window for a dialog (see Figure *) is used to set some 
  918. additional flags. These flags are explained in the following table: 
  919.  
  920. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  921. ΓöéTitle                         ΓöéFlag                     Γöé
  922. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  923. ΓöéTitlebar                      ΓöéFCF_TITLEBAR             Γöé
  924. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  925. ΓöéSystem menu                   ΓöéFCF_SYSMENU              Γöé
  926. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  927. ΓöéButtons/Minimize              ΓöéFCF_MINBUTTON            Γöé
  928. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  929. ΓöéButtons/Maximize              ΓöéFCF_MAXBUTTON            Γöé
  930. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  931. ΓöéButtons/Hide                  ΓöéFCF_HIDEBUTTON           Γöé
  932. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  933. ΓöéScrollbars/Vertical           ΓöéFCF_VERTSCROLL           Γöé
  934. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  935. ΓöéScrollbars/Horizontal         ΓöéFCF_HORZSCROLL           Γöé
  936. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  937. ΓöéResources/Accelerator table   ΓöéFCF_ACCELTABLE           Γöé
  938. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  939. ΓöéResources/Icon                ΓöéFCF_ICON                 Γöé
  940. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  941. ΓöéTasklist                      ΓöéFCF_TASKLIST             Γöé
  942. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  943. ΓöéNo byte align                 ΓöéFCF_NOBYTEALIGN          Γöé
  944. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  945. ΓöéNo move with owner            ΓöéFCF_NOMOVEWITHOWNER      Γöé
  946. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  947. ΓöéAutomatic Positioning         ΓöéFCF_SHELLPOSITON         Γöé
  948. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  949.  
  950.  
  951. ΓòÉΓòÉΓòÉ 4.11.2. "StdWindow" and "MainWindow" ΓòÉΓòÉΓòÉ
  952.  
  953. Instances of StdWindow and MainWindow are again created using the Tools 
  954. Palette. The preferences pages look just alike the preferences pages for dialog 
  955. windows. 
  956.  
  957. The only difference is that on the first page the size of the client area of 
  958. the window is displayed. The size of the client area is just the size of the 
  959. window without the border and the rest of the frame controls. 
  960.  
  961. Be careful when moving or resizing child objects of a main window or standard 
  962. window. In some cases there are some problems with redrawing. If you experience 
  963. a problem with redrawing a window object after resizing or moving, just 
  964. deselect the object and select it once again. 
  965.  
  966.  
  967. ΓòÉΓòÉΓòÉ 4.11.3. "Static" ΓòÉΓòÉΓòÉ
  968.  
  969.  
  970.  
  971.  
  972. Preferences page for instances of Static
  973.  
  974. The radio buttons as displayed in Figure * correspond to the flag constants as 
  975.  
  976. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  977. ΓöéTitle                         ΓöéFlag                Γöé
  978. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  979. Γöéforeground frame              ΓöéSS_FGNDFRAME        Γöé
  980. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  981. Γöébackground frame              ΓöéSS_BKGNDFRAME       Γöé
  982. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  983. Γöéhalftone frame                ΓöéSS_HALFTONEFRAME    Γöé
  984. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  985. Γöéforeground rectangle          ΓöéSS_FGNDRECT         Γöé
  986. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  987. Γöébackground rectangle          ΓöéSS_BKGNDRECT        Γöé
  988. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  989. Γöéhalftone rectangle            ΓöéSS_HALFTONERECT     Γöé
  990. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  991. ΓöéText                          ΓöéSS_TEXT             Γöé
  992. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  993. ΓöéGroupbox                      ΓöéSS_GROUPBOX         Γöé
  994. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  995.  
  996.  
  997. ΓòÉΓòÉΓòÉ 4.11.4. "CheckBox" and "AutoCheckBox" ΓòÉΓòÉΓòÉ
  998.  
  999. Simple check boxes and automatic check boxes are both created using 
  1000. Buttons/Check in the Palette. Which class is used for creating the object is 
  1001. determined by a check box in the preferences page. 
  1002.  
  1003. The two check boxes Group and Tabstop correspond to the window flags WS_GROUP 
  1004. respectively WS_TABSTOP. If Autocheckbox is in checked state, the object will 
  1005. be an instance of AutoCheckBox, otherwise, an instance of CheckBox will be 
  1006. used. 
  1007.  
  1008.  
  1009. ΓòÉΓòÉΓòÉ 4.11.5. "RadioButton" and "AutoRadioButton" ΓòÉΓòÉΓòÉ
  1010.  
  1011. Radio buttons and automatic radio buttons are both created using Buttons/Radio 
  1012. in the Palette. Which class is used for creating the object is determined by a 
  1013. check box in the preferences page. 
  1014.  
  1015. The two check boxes Group and Tabstop correspond to the window flags WS_GROUP 
  1016. respectively WS_TABSTOP. If Autoradiobutton is in checked state, the object 
  1017. will be an instance of AutoRadioButton, otherwise, an instance of RadioButton 
  1018. will be used. 
  1019.  
  1020. not Cursor selectable represents the flag BS_NOCURSORSELECT. If in checked 
  1021. state, the radio button (or automatic radio button) cannot be selected using 
  1022. the cursor keys. 
  1023.  
  1024.  
  1025. ΓòÉΓòÉΓòÉ 4.11.6. "TriStateButton" and "AutoTriStateButton" ΓòÉΓòÉΓòÉ
  1026.  
  1027. Tri-state buttons and automatic tri-state buttons are both created using 
  1028. Buttons/3State in the Palette. Which class is used for creating the object is 
  1029. determined by a check box in the preferences page. 
  1030.  
  1031. The two check boxes Group and Tabstop correspond to the window flags WS_GROUP 
  1032. respectively WS_TABSTOP. If Autotristatebutton is in checked state, the object 
  1033. will be an instance of AutoTriStateButton, otherwise, an instance of 
  1034. TriStateButton will be used. 
  1035.  
  1036.  
  1037. ΓòÉΓòÉΓòÉ 4.11.7. "PushButton" ΓòÉΓòÉΓòÉ
  1038.  
  1039. In the preferences window for push buttons the radio buttons and check boxes 
  1040. correspond to the flag constants as shown in the following table: 
  1041.  
  1042. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1043. ΓöéTitle               ΓöéFlag                Γöé
  1044. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1045. ΓöéGroup               ΓöéWS_GROUP            Γöé
  1046. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1047. ΓöéTabstop             ΓöéWS_TABSTOP          Γöé
  1048. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1049. ΓöéDefault             ΓöéBS_DEFAULT          Γöé
  1050. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1051. ΓöéBorder              Γöénot BS_NOBORDER     Γöé
  1052. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1053. ΓöéCommand             Γöé---                 Γöé
  1054. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1055. ΓöéHelp                ΓöéBS_HELP             Γöé
  1056. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1057. ΓöéSystem Command      ΓöéBS_SYSCOMMAND       Γöé
  1058. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1059.  
  1060.  
  1061. ΓòÉΓòÉΓòÉ 4.11.8. "EntryField" ΓòÉΓòÉΓòÉ
  1062.  
  1063. The look and feel of an entry field control as created from the Palette using 
  1064. Entry/Normal can be modified by using the Window Properties page of the 
  1065. Preferences notebook. 
  1066.  
  1067.  
  1068.  
  1069.  
  1070. Setup page for entry field controls
  1071.  
  1072. The setup page as depicted in Figure * contains four entry fields and some 
  1073. radio buttons and check boxes used to set the control flags. 
  1074.  
  1075. The three entry fields labelled with Title, Tag and ID are just the same as 
  1076. already described previously. The one titled Length can be used to specify the 
  1077. maximal length of the data which can be entered by the user. A value of 0 means 
  1078. that the length of the string is not limited, a value of n 0 otherwise will 
  1079. cause the input string to be limited to at most n characters. 
  1080.  
  1081. The check boxes and radio buttons correspond to the window flags as will be 
  1082. shown in the following table. For a description of the flags and how setting or 
  1083. unsetting them will modify the entry field's look and feel see the Reference 
  1084. Manual. 
  1085.  
  1086. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1087. ΓöéTitle               ΓöéFlag                Γöé
  1088. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1089. ΓöéAlignment/left      ΓöéES_LEFT             Γöé
  1090. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1091. ΓöéAlignment/centered  ΓöéES_CENTER           Γöé
  1092. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1093. ΓöéAlignment/right     ΓöéES_RIGHT            Γöé
  1094. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1095. Γöéscroll              ΓöéES_AUTOSCROLL       Γöé
  1096. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1097. Γöéunreadable          ΓöéES_UNREADABLE       Γöé
  1098. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1099. Γöéread-only           ΓöéES_READONLY         Γöé
  1100. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1101. ΓöéMargin              ΓöéES_MARGIN           Γöé
  1102. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1103. ΓöéGroup               ΓöéWS_GROUP            Γöé
  1104. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1105. ΓöéTabstop             ΓöéWS_TABSTOP          Γöé
  1106. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1107.  
  1108.  
  1109. ΓòÉΓòÉΓòÉ 4.11.9. "MultiLineEntryField" ΓòÉΓòÉΓòÉ
  1110.  
  1111. Instances of the class MultiLineEntryField are created by simply pressing 
  1112. Entry/MLE in the Tools Palette. These objects are special entry fields suited 
  1113. for entering more than a single line of data. 
  1114.  
  1115. The behaviour of MLE windows can be influenced by checking or unchecking some 
  1116. of the check boxes in the Window Properties page of the Preferences window. The 
  1117. single check boxes there are associated with the MLS_* flags as 
  1118.  
  1119. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1120. ΓöéTitle                         ΓöéFlag                Γöé
  1121. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1122. Γöéword-wrap                     ΓöéMLS_WORDWRAP        Γöé
  1123. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1124. Γöéread-only                     ΓöéMLS_READONLY        Γöé
  1125. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1126. Γöéignore TAB key                ΓöéMLS_IGNORETAB       Γöé
  1127. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1128. Γöéhorizontal scrollbar          ΓöéMLS_HSCROLL         Γöé
  1129. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1130. Γöévertical scrollbar            ΓöéMLS_VSCROLL         Γöé
  1131. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1132. ΓöéMargin                        ΓöéMLS_BORDER          Γöé
  1133. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1134. ΓöéGroup                         ΓöéWS_GROUP            Γöé
  1135. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1136. ΓöéTabstop                       ΓöéWS_TABSTOP          Γöé
  1137. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1138.  
  1139.  
  1140. ΓòÉΓòÉΓòÉ 4.11.10. "ComboBox" ΓòÉΓòÉΓòÉ
  1141.  
  1142. Comboboxes are just a combination of an entry field and a normal list box. The 
  1143. appearance of objects of the class ComboBox can be controlled using the 
  1144. Preferences notebook. 
  1145.  
  1146. You can choose the type of the control by choosing one of Type/Simple, 
  1147. Type/Dropdown and Type/Dropdown list. These radio buttons correspond to the 
  1148. flag constants CBS_SIMPLE, CBS_DROPDOWN and CBS_DROPDOWNLIST. 
  1149.  
  1150.  
  1151.  
  1152.  
  1153. "Standard" Window Properties page for use withuser interface objects that do not have special properties, e.g.scroll bars and container windows.
  1154.  
  1155. The two check boxes Group and Tabstop represent the values of the flags 
  1156. WS_GROUP and WS_TABSTOP. 
  1157.  
  1158.  
  1159. ΓòÉΓòÉΓòÉ 4.11.11. "ListBox" ΓòÉΓòÉΓòÉ
  1160.  
  1161. User interface objects created by pressing Listbox/Normal in the Tools Palette 
  1162. are instances of the library class ListBox. You can add a horizontal scroll bar 
  1163. to the list box by checking horizontal Scrollbar (LS_MULTIPLESEL) or enable 
  1164. multiple selection (LS_MULTIPLESEL) or extended selection techniques 
  1165. (LS_EXTENDEDSEL) by checking the boxes beneath multiple Selection or extended 
  1166. Selection. 
  1167.  
  1168. The two check boxes Group and Tabstop again represent the state of the flags 
  1169. WS_GROUP respectively WS_TABSTOP. 
  1170.  
  1171.  
  1172. ΓòÉΓòÉΓòÉ 4.11.12. "ScrollBar" ΓòÉΓòÉΓòÉ
  1173.  
  1174. At the moment you can use Scrollbar/horiz. and Scrollbar/vertical to create 
  1175. instances of the PM class ScrollBar. Horizontal and vertical scroll bars to 
  1176. have the same preferences pages and provide only support for modifying the 
  1177. WS_GROUP and WS_TABSTOP properties via Group and Tabstop. 
  1178.  
  1179. The "standard" Window Properties page shown in Figure * is used whenever there 
  1180. are no special settings available for the selected window. This page is equally 
  1181. used for some windows, e.g. scroll bars or container windows. Better support 
  1182. for these windows will be added in future versions of the Interface Editor. 
  1183.  
  1184.  
  1185. ΓòÉΓòÉΓòÉ 4.11.13. "Container" ΓòÉΓòÉΓòÉ
  1186.  
  1187. As was already mentioned, container windows do not have special properties to 
  1188. be set via the Preferences window. See the last section for a description of 
  1189. the Window Properties page of the Preferences window. Figure * depicts this 
  1190. simple settings page. 
  1191.  
  1192.  
  1193. ΓòÉΓòÉΓòÉ 4.11.14. "NoteBook" ΓòÉΓòÉΓòÉ
  1194.  
  1195. Instances of the class NoteBook can be seen as a container for many different 
  1196. dialog windows---normally all being the same size. The pages of the notebook 
  1197. are set using the instance methods (see the Reference Manual for more 
  1198. information on this topic), the general appearance of the notebook is set by 
  1199. the user on two different preferences pages. 
  1200.  
  1201.  
  1202.  
  1203.  
  1204. First preferences page for instances of NoteBook
  1205.  
  1206. The first page---as depicted in Figure * is used to set the general window data 
  1207. as the window Title, the Tag value and the presentation manager identifier ID. 
  1208. Further the behaviour of the window in a dialog is set using the check boxes 
  1209. Group (WS_GROUP) and Tabstop (WS_TABSTOP). 
  1210.  
  1211. There is a check box labelled Spiral/Solid Binding which is responsible for the 
  1212. type of "binding" the user will see. If in checked state, a spiral binding 
  1213. (flag BKS_SPIRALBIND) is used, otherwise a notebook having solid binding 
  1214. (BKS_SOLIDBIND) is displayed. 
  1215.  
  1216. The rest of the page contains a group of radio buttons (Back page position) 
  1217. determining the position of the notebook's back page. The mutual exclusive 
  1218. settings defined by the four radio buttons are 
  1219.  
  1220. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1221. ΓöéTitle          ΓöéFlag                Γöé
  1222. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1223. Γöébottom/right   ΓöéBKS_BACKPAGEBR      Γöé
  1224. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1225. Γöébottom/left    ΓöéBKS_BACKPAGEBL      Γöé
  1226. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1227. Γöétop/right      ΓöéBKS_BACKPAGETR      Γöé
  1228. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1229. Γöétop/left       ΓöéBKS_BACKPAGETL      Γöé
  1230. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1231.  
  1232. On the second page of the special preferences for the notebook window you will 
  1233. see four distinct group of radio buttons. 
  1234.  
  1235.  
  1236.  
  1237.  
  1238. Second preferences page for notebook windows
  1239.  
  1240. These are labelled with Major tab position, determining the position where the 
  1241. (major) tabs are displayed, Tab shape defining the shape of the tabs, 
  1242. Statustext and Tabtext each defining the position of either the status text for 
  1243. every page or the tab text for the (major) tabs. The window is depicted in 
  1244. Figure *. 
  1245.  
  1246. The first group, Major tab position, is used to determine which of the flags 
  1247. defining the major tab position is used: 
  1248.  
  1249. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1250. ΓöéTitle  ΓöéFlag                Γöé
  1251. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1252. Γöéright  ΓöéBKS_MAJORTABRIGHT   Γöé
  1253. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1254. Γöéleft   ΓöéBKS_MAJORTABLEFT    Γöé
  1255. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1256. Γöétop    ΓöéBKS_MAJORTABTOP     Γöé
  1257. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1258. Γöébottom ΓöéBKS_MAJORTABBOTTOM  Γöé
  1259. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1260.  
  1261. The group of radio buttons titled Tab shape will change the flags according to 
  1262. the following table: 
  1263.  
  1264. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1265. ΓöéTitle     ΓöéFlag                Γöé
  1266. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1267. Γöésquared   ΓöéBKS_SQUARETABS      Γöé
  1268. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1269. Γöérounded   ΓöéBKS_ROUNDEDTABS     Γöé
  1270. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1271. Γöépolygon   ΓöéBKS_POLYGONTABS     Γöé
  1272. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1273.  
  1274. The next group (the left group on the bottom of the page) is used to set the 
  1275. position of the status text for the pages and is labelled Statustext. It is 
  1276. used to modify the notebook flags 
  1277.  
  1278. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1279. ΓöéTitle     ΓöéFlag                Γöé
  1280. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1281. Γöéleft      ΓöéBKS_STATUSTEXTLEFT  Γöé
  1282. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1283. Γöécenter    ΓöéBKS_STATUSTEXTCENTERΓöé
  1284. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1285. Γöéright     ΓöéBKS_STATUSTEXTRIGHT Γöé
  1286. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1287.  
  1288. The horizontal alignment of the tab text is specifed using the last group named 
  1289. Tabtext. The three radio buttons again are mutually exclusive and will define 
  1290. the flags as shown in the following table: 
  1291.  
  1292. ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  1293. ΓöéTitle     ΓöéFlag                Γöé
  1294. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1295. Γöéleft      ΓöéBKS_TABTEXTLEFT     Γöé
  1296. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1297. Γöécenter    ΓöéBKS_TABTEXTCENTER   Γöé
  1298. Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  1299. Γöéright     ΓöéBKS_TABTEXTRIGHT    Γöé
  1300. ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  1301.  
  1302.  
  1303. ΓòÉΓòÉΓòÉ 4.11.15. "Printer" ΓòÉΓòÉΓòÉ
  1304.  
  1305. At the moment there is no disting preferences page for instances of the library 
  1306. class Printer. 
  1307.  
  1308. To specify a custom setup dialog for your printer objects, use the Interface 
  1309. Editor's object connection facilities. 
  1310.  
  1311.  
  1312. ΓòÉΓòÉΓòÉ 4.11.16. "Help" ΓòÉΓòÉΓòÉ
  1313.  
  1314.  
  1315.  
  1316.  
  1317. Preferences page for Help objects
  1318.  
  1319. The preferences page for Help objects is shown in Figure *. You must specify a 
  1320. Help File in the corresponding entry field. Just enter the name of the file, 
  1321. e.g. program.hlp in this field. The Find button below this filed does not work 
  1322. at the moment. You should not enter an absolute path name for the help file. 
  1323. Just enter the name of the help file without a full path. 
  1324.  
  1325. The entry field labelled with Title is used to specify the title text of the 
  1326. help window. The Help Table ID, 1000 by default, is the identifier of the help 
  1327. table in the resource file. To utilize Help objects, you must create a help 
  1328. file, e.g. using ipfc, and create an entry for the main help table in the 
  1329. resource file for the application. 
  1330.  
  1331.  
  1332. ΓòÉΓòÉΓòÉ 4.12. Connecting Objects ΓòÉΓòÉΓòÉ
  1333.  
  1334. In the Tutorial as well as in the Reference Manual the design philosophy of the 
  1335. library package is introduced. Every user action is normally processed by one 
  1336. of the standard PM classes in the beginning. If an object thinks it is not able 
  1337. to react to a user action as expected then it will try to send a message to 
  1338. some other object (in plain C you would call this method a call-back function) 
  1339. letting it perform the additional work. Which method is called is either 
  1340. specified by the user or by the sending object itself. 
  1341.  
  1342.  
  1343.  
  1344.  
  1345. Connecting a main window with a multi-line entry field
  1346.  
  1347. The first case is used for user actions issuing some kind of command. The 
  1348. application programmer has to decide which method of some object should be 
  1349. called in case the user issues a special command. You can set up such 
  1350. command-action bindings by using the methods -bindCommand:withObject:selector: 
  1351. (for standard, main and dialog windows) or -bindWith:selector: in case the 
  1352. command is to be issued from a button control. Previously, command-action 
  1353. bindings were used to connect menu items or button controls with special 
  1354. methods to be executed when the item was chosen or the button was pressed. It 
  1355. must be noted that the term command-action binding will only indicate a binding 
  1356. directly originating from the sending object itself, i.e., bindings set up via 
  1357. -bindCommand:withObject:selector: will not fall into this category. 
  1358.  
  1359. The other way of sending a message to some object is called delegating. An 
  1360. object will delegate some of its functions to another object. Only the object 
  1361. must be specified by the application programmer. The sending object knows, what 
  1362. special methods to call if it is required to do so. Delegate objects are 
  1363. normally set using the -setDelegate: method. Connections of this kind are 
  1364. called outlet connections. You will remember that in the original "Textview" 
  1365. application the delegate object of the main window provided a method 
  1366. -windowDidResize: which was called whenever the main window was resized. As a 
  1367. consequence, this method adapted the size of the multi-line entry field to fill 
  1368. the complete client area of the main window. 
  1369.  
  1370. It has already been mentioned before that the Interface Editor program provides 
  1371. more functionality than a normal dialog editor. In addition to creating 
  1372. instances of user-defined classes, the Interface Editor can also be used to set 
  1373. up command-action bindings and outlet bindings. A command-action binding is 
  1374. defined to be a connection between two objects uniquely connecting a command 
  1375. (represented by an instance variable of type (Command) in the sending object) 
  1376. with a specific action method of the target object. Outlet bindings are simply 
  1377. connections of an outlet instance variable (an instance variable of type (id) 
  1378. in the source object) with a target object. Every time a command is issued, the 
  1379. associated action method of the target object is automatically called, and in 
  1380. case of an outlet binding, the outlet instance variable is initialized to be a 
  1381. pointer to the target object. 
  1382.  
  1383. To set up a command-action binding or an outlet binding you can simply use the 
  1384. OS/2 direct manipulation facilities. Move the mouse pointer to the source 
  1385. object (either a window object or an object in the main window of the interface 
  1386. file) and make an object reference to the target object as you would do to make 
  1387. an object reference on the workplace shell. You can either press the Ctrl and 
  1388. the Shift key and "drag" the object with the mouse, or simply press mouse 
  1389. button 3 (normally the middle mouse button) while moving the pointer from the 
  1390. source object to the target object. 
  1391.  
  1392. In Figure * the process of connecting an object (a main window in this special 
  1393. case) with another object is shown. The purpose of this type of connection will 
  1394. be to initialize an outlet instance variable of the source object, the main 
  1395. window. 
  1396.  
  1397. After "dropping" the main window on the multi-line entry field, a dialog 
  1398. letting you choose the command-action or outlet to connect will appear on the 
  1399. screen. This dialog is depicted in Figure *. 
  1400.  
  1401.  
  1402.  
  1403.  
  1404. Dialog for connecting the an outlet instance variable ofa main window with a multi-line entry field
  1405.  
  1406. In the list box control on the left a list of outlets (and even of available 
  1407. commands) is presented. The right list box will be used to choose the 
  1408. appropriate action if a command-action binding is to be established. In our 
  1409. case, an outlet connection from the main window to the multi-line entry field 
  1410. via the outlet clientWindow shall be established. Select the appropriate item 
  1411. (clientWindow) in the Outlets list box and press Ok. This will cause the outlet 
  1412. connection to be established. 
  1413.  
  1414.  
  1415.  
  1416.  
  1417. Object Connections page in the Preferenceswindow
  1418.  
  1419. The list box will display all available outlet instance variables and commands. 
  1420. You can differ these two kinds of items by the way they are presented. Any 
  1421. variable representing a command is put between brackets, so if delegate was a 
  1422. command instead of an outlet, it would be displayed as (delegate). Variables 
  1423. already connected are preceded by a *. The next time you will try to make a 
  1424. connection originating from the main window, the first item in the list box to 
  1425. the left will be displayed as *clientWindow. To change a connection, you can 
  1426. simply overwrite it by choosing it when making another connection. 
  1427.  
  1428. To determine which outlet instance variables or commands of the selected 
  1429. objects are already connected to some target object, have a look at the Object 
  1430. Connections page of the Preferences window. Using this page---as shown in 
  1431. Figure *---you can also delete connections established previously. 
  1432.  
  1433. In Appendix cha:actions-outlets a list of all outlet instance variables, 
  1434. commands and action methods supported by the various classes is given. 
  1435.  
  1436.  
  1437. ΓòÉΓòÉΓòÉ 4.13. Removing Object Connections ΓòÉΓòÉΓòÉ
  1438.  
  1439. Deleting a connection is achieved by using the Preferences window (see Figure 
  1440. *). All connections are displayed on a page labelled with Object Connections 
  1441. (the tab text of this page is Conn.). 
  1442.  
  1443. On this page a list of all available outlets and commands for the selected 
  1444. object (the source object) is displayed. Just as in the dialog displayed when 
  1445. connecting objects (Figure *) commands can be identified by having their name 
  1446. enclosed in brackets. Again, already connected outlets or commands are denoted 
  1447. by a leading * in the list. 
  1448.  
  1449. Using the Disconnect button located at the bottom of the page you can delete 
  1450. the currently selected connection. 
  1451.  
  1452. Be careful when deleting a connection, there is no undo function for this 
  1453. action at the moment. 
  1454.  
  1455. You do not have to delete a connection before connecting an instance variable 
  1456. or a command to another target object. By connecting a variable or command 
  1457. again the previous connection is deleted automatically. 
  1458.  
  1459.  
  1460. ΓòÉΓòÉΓòÉ 4.14. Updating Class Information ΓòÉΓòÉΓòÉ
  1461.  
  1462. When changing some class definitions using the Project Editor application while 
  1463. editing an interface file, you will have to update the information Interface 
  1464. Editor has of the user-defined classes manually. To perform an update simply 
  1465. choose Reload Classes from the File menu after saving the project data in 
  1466. Project Editor. 
  1467.  
  1468. In future versions of this development suite I will try to integrate the 
  1469. different tools more closely so that these actions will be performed 
  1470. automatically. 
  1471.  
  1472.  
  1473. ΓòÉΓòÉΓòÉ 4.15. Using Interface Files ΓòÉΓòÉΓòÉ
  1474.  
  1475. To use an interface file in your applications, you have to unarchive the 
  1476. objects from the Objective C Typed Stream they are stored on. 
  1477.  
  1478. The simplest way to achieve this is by using the -loadIBFile: method of the 
  1479. class StdApp. This method will return an instance of InterfaceFile you can use 
  1480. to access the objects stored in the interface file. The only access method you 
  1481. should use is -objectWithTitle: to query a pointer to one of the stored 
  1482. objects. 
  1483.  
  1484. The connections you create visually will be set up automatically when loading 
  1485. the interface file. 
  1486.  
  1487. When using Project Editor to create a project, a main implementation file 
  1488. called "main.m" will be created automagically. This file will load an interface 
  1489. file named "main.oib" on startup. 
  1490.  
  1491.  
  1492. ΓòÉΓòÉΓòÉ 5. The Database Editor Utility ΓòÉΓòÉΓòÉ
  1493.  
  1494. When using the database library, and you want to create empty database files, 
  1495. there are two possible ways, you can go. First, you can create an empty file 
  1496. from scratch using the appropriate methods of DBFile, or you can simply create 
  1497. an empty file (a template) by using this Presentation Manager application. 
  1498.  
  1499.  
  1500.  
  1501. Database builder main window
  1502.  
  1503. Figure * shows the main window of the Database Editor program. A listbox is 
  1504. displayed, currently not storing any items. There the data fields will be 
  1505. displayed. 
  1506.  
  1507.  
  1508.  
  1509. Dialog box used to add new fields
  1510.  
  1511. Figure * displays the dialog box used to add new data fields to the database 
  1512. file. 
  1513.  
  1514. At the moment, only new database files can be created. There is no way to edit 
  1515. the field structure of an existing file. This will be implemented in the next 
  1516. version. So be careful when creating a database file! 
  1517.  
  1518. As this application is simple to use, the functions are not described in more 
  1519. detail. 
  1520.  
  1521. The only thing worth mentioning are the data types provided and the length of 
  1522. the data fields, the user can choose. 
  1523.  
  1524.  
  1525. ΓòÉΓòÉΓòÉ 5.1. Data Types ΓòÉΓòÉΓòÉ
  1526.  
  1527. The library currently supports the data types boolean, character, date and 
  1528. numeric. Additionally, the Database Editor allows you to create memo fields. 
  1529.  
  1530. Memo fields require a separate file, where the data is stored. This file is not 
  1531. created by the program. 
  1532.  
  1533.  
  1534. ΓòÉΓòÉΓòÉ 5.2. Length of Fields ΓòÉΓòÉΓòÉ
  1535.  
  1536. The field Length: is used to specify the total length of the field currently 
  1537. selected. This also includes decimals (for numeric fields) and, if decimals are 
  1538. used, also one character for the comma. 
  1539.  
  1540. Date fields always have a length of 8, decimals is 0. 
  1541.  
  1542. Memo fields have a length of 10, no decimals. 
  1543.  
  1544. Character fields are not allowed to have decimals. 
  1545.  
  1546. Boolean fields (logic fields) have a length of 1, without decimals. 
  1547.  
  1548.  
  1549. ΓòÉΓòÉΓòÉ 6. Displaying DBase Database Files using DBView ΓòÉΓòÉΓòÉ
  1550.  
  1551. The program DBView was at first developed as a sample program demonstrating how 
  1552. to use database files together with the Container class. The source code can be 
  1553. found in the directory \usr\samples\dbview. As I think this program can be 
  1554. quite useful in everyday (computer) life, it was also put into the binary 
  1555. directory together with the other development tools. 
  1556.  
  1557. Its purpose is to simply display DBase III database files in a Presentation 
  1558. Manager window. All data fields currently supported by the database library, 
  1559. character fields, numeric data, logical fields and date fields will be 
  1560. displayed. 
  1561.  
  1562.  
  1563.  
  1564.  
  1565. DBView displaying a simple DBase database file
  1566.  
  1567. The data itself will be displayed in form of a table. Every single record in 
  1568. the database file is displayed in a line, every column represents a data field. 
  1569. The data is displayed using the fields' -stringValue method resulting in some 
  1570. awkward format for e.g. date fields. 
  1571.  
  1572. Figure * depicts the program window displaying a simple database file. The only 
  1573. menu item, Open, will cause a file dialog to be displayed where you can choose 
  1574. the database file---ending in ".dbf"---you wish to display. 
  1575.  
  1576. You can also pass a single parameter to DBView when starting the program, to 
  1577. load a database file on startup. 
  1578.  
  1579. Type 
  1580.  
  1581.  dbview file.dbf 
  1582.  
  1583. which causes to automatically load and display the file "file.dbf" when 
  1584. starting the program. 
  1585.  
  1586. It is recommended to set up an association for all files ending in ".dbf" with 
  1587. this program using the program object's settings notebook. This will let you 
  1588. start the program and display a data file by simply double-clicking a data 
  1589. file. 
  1590.  
  1591. Feel free to extend the source code of the program and add more functionality. 
  1592. Adding capabilities for e.g. editing or sorting will be some nice programming 
  1593. exercises. 
  1594.  
  1595.  
  1596. ΓòÉΓòÉΓòÉ 7. Displaying Your Program's Debugging Output Using Console ΓòÉΓòÉΓòÉ
  1597.  
  1598. To simplify quick \& dirty debugging of your programs withoud using the GNU 
  1599. debugger, a program called Console is provided. This program will display a 
  1600. window and read data from a pipe your programs can write to. Using this program 
  1601. you can e.g. redirect your applications output files stdout and stderr to a 
  1602. Presentation Manager window. 
  1603.  
  1604.  
  1605.  
  1606.  
  1607. "Console" window
  1608.  
  1609. When started a window similar to the one depicted in Figure * will be 
  1610. displayed. You can see two menu items in the menu bar called Save and Clear. 
  1611. Save will store the current size and position of the console window in your 
  1612. system configuration file "os2.ini". Clear will clear the display area of the 
  1613. window. 
  1614.  
  1615. In the title bar of the console window the name of your host system will be 
  1616. displayed. It is taken from the environment variable SYSTEMNAME. Use something 
  1617. like 
  1618.  
  1619. SET SYSTEMNAME=mysystem
  1620.  
  1621. in your "config.sys"-file to set the name of your computer system. 
  1622.  
  1623. By default, the program will read from the file \PIPE\Console and display 
  1624. everthing written there in the window. At most 16 client processes can write to 
  1625. this file at once. 
  1626.  
  1627. To specify more client processes or another name for the pipe, use the command 
  1628. line options as shown below 
  1629.  
  1630.  console [-c count] [-n name] 
  1631.  
  1632. count is the number of processes granted simultaneously access to the pipe and 
  1633. name is the name of the pipe file. 
  1634.  
  1635. To start the console program listening on the file \PIPE\p1 for suitable for at 
  1636. most 30 clients type 
  1637.  
  1638.  console -c 30 -n \PIPE\p1 
  1639.  
  1640. on the command prompt. 
  1641.  
  1642. To redirect your program's output files stdout and stderr to the console 
  1643. window, type 
  1644.  
  1645.  prog > \PIPE\Console 2> \PIPE\Console 
  1646.  
  1647. when starting the program prog.exe. Every output your program does using 
  1648.  
  1649.      printf(), 
  1650.      fprintf(stdout,...) or 
  1651.      fprintf(stderr,...) 
  1652.  
  1653.  will be displayed in the console window. This can be quite useful for quickly 
  1654.  debugging your application without the need to start a full-featured debugger. 
  1655.  
  1656.  
  1657. ΓòÉΓòÉΓòÉ 8. List of Action Methods,Commands and Outlet Variables ΓòÉΓòÉΓòÉ
  1658.  
  1659. This chapter will list all pre-defined classes currently supported by the 
  1660. Interface Editor application. For every class the action methods and the outlet 
  1661. instance variables are given. For a description of these variables and methods 
  1662. see the Reference Manual. 
  1663.  
  1664. Every classes' description structured as follows: 
  1665.  
  1666.    1. The name of the class, e.g. 
  1667.  
  1668.       EntryField 
  1669.  
  1670.       will denote that a description of the class EntryField will be presented. 
  1671.    2. Coming next is the list of action methods, e.g. 
  1672.  
  1673.       .pasteSelection:, -cutSelection:, -copySelection:, -clearSelection: 
  1674.  
  1675.  
  1676.    3. The list of commands will enumerate all commands a single object can 
  1677.       issue. These commands can automatically call action methods. Mostly this 
  1678.       line is empty. 
  1679.  
  1680.  
  1681.    4. The last line will enumerate all outlet instance variables. For the 
  1682.       EntryField class, this would simply be 
  1683.  
  1684.       delegate 
  1685.  
  1686.  
  1687. ΓòÉΓòÉΓòÉ 8.1. AutoCheckBox ΓòÉΓòÉΓòÉ
  1688.  
  1689.      Actions: --- 
  1690.      Commands: command 
  1691.      Outlets: delegate 
  1692.  
  1693.  
  1694. ΓòÉΓòÉΓòÉ 8.2. AutoRadioButton ΓòÉΓòÉΓòÉ
  1695.  
  1696.      Actions: --- 
  1697.      Commands: command 
  1698.      Outlets: delegate 
  1699.  
  1700.  
  1701. ΓòÉΓòÉΓòÉ 8.3. AutoTriStateButton ΓòÉΓòÉΓòÉ
  1702.  
  1703.      Actions: --- 
  1704.      Commands: command 
  1705.      Outlets: delegate 
  1706.  
  1707.  
  1708. ΓòÉΓòÉΓòÉ 8.4. CheckBox ΓòÉΓòÉΓòÉ
  1709.  
  1710.      Actions: --- 
  1711.      Commands: command 
  1712.      Outlets: delegate 
  1713.  
  1714.  
  1715. ΓòÉΓòÉΓòÉ 8.5. ComboBox ΓòÉΓòÉΓòÉ
  1716.  
  1717.      Actions: --- 
  1718.      Commands: --- 
  1719.      Outlets: delegate 
  1720.  
  1721.  
  1722. ΓòÉΓòÉΓòÉ 8.6. Container ΓòÉΓòÉΓòÉ
  1723.  
  1724.      Actions: -deselectAll:, -detailView:, -hideColumn:. 
  1725.       -hideNotSelectedRecords:, -hideRecord:, -hideSelectedRecords:, 
  1726.       -iconView:, -nameView:, -selectAll:, -showAllColumns:, -showAllRecords:, 
  1727.       -showColumn:, -showRecord:, -sortByTitleWithoutCase:, 
  1728.       -sortByTitleWithCase:, -textview:, -treeView: 
  1729.      Commands: --- 
  1730.      Outlets: delegate 
  1731.  
  1732.  
  1733. ΓòÉΓòÉΓòÉ 8.7. EntryField ΓòÉΓòÉΓòÉ
  1734.  
  1735.      Actions: -clearSelection:, -copySelection:, -cutSelection:, 
  1736.       -pasteSelection: 
  1737.      Commands: --- 
  1738.      Outlets: delegate 
  1739.  
  1740.  
  1741. ΓòÉΓòÉΓòÉ 8.8. Help ΓòÉΓòÉΓòÉ
  1742.  
  1743.      Actions: -associateWith:, -helpExtended:, -helpFor:, -helpForHelp:, 
  1744.       -helpIndex: 
  1745.      Commands: --- 
  1746.      Outlets: --- 
  1747.  
  1748.  
  1749. ΓòÉΓòÉΓòÉ 8.9. ListBox ΓòÉΓòÉΓòÉ
  1750.  
  1751.      Actions: --- 
  1752.      Commands: --- 
  1753.      Outlets: delegate 
  1754.  
  1755.  
  1756. ΓòÉΓòÉΓòÉ 8.10. MainWindow ΓòÉΓòÉΓòÉ
  1757.  
  1758.      Actions: -centerOnScreen:, -makeKeyAndOrderFront:, -performClose:, 
  1759.       -performQuit: 
  1760.      Commands: --- 
  1761.      Outlets: clientWindow, delegate 
  1762.  
  1763.  
  1764. ΓòÉΓòÉΓòÉ 8.11. MultiLineEntryField ΓòÉΓòÉΓòÉ
  1765.  
  1766.      Actions: -clearAll:, -clearSelection:, -copySelection:, -cutSelection:, 
  1767.       -pasteSelection: 
  1768.      Commands: --- 
  1769.      Outlets: delegate 
  1770.  
  1771.  
  1772. ΓòÉΓòÉΓòÉ 8.12. NoteBook ΓòÉΓòÉΓòÉ
  1773.  
  1774.      Actions: --- 
  1775.      Commands: --- 
  1776.      Outlets: delegate 
  1777.  
  1778.  
  1779. ΓòÉΓòÉΓòÉ 8.13. Printer ΓòÉΓòÉΓòÉ
  1780.  
  1781.      Actions: -jobProperties:, -printerSetup: 
  1782.      Commands: --- 
  1783.      Outlets: setupDialog 
  1784.  
  1785.  
  1786. ΓòÉΓòÉΓòÉ 8.14. PushButton ΓòÉΓòÉΓòÉ
  1787.  
  1788.      Actions: --- 
  1789.      Commands: command 
  1790.      Outlets: delegate 
  1791.  
  1792.  
  1793. ΓòÉΓòÉΓòÉ 8.15. RadioButton ΓòÉΓòÉΓòÉ
  1794.  
  1795.      Actions: --- 
  1796.      Commands: command 
  1797.      Outlets: delegate 
  1798.  
  1799.  
  1800. ΓòÉΓòÉΓòÉ 8.16. ScrollBar ΓòÉΓòÉΓòÉ
  1801.  
  1802.      Actions: --- 
  1803.      Commands: --- 
  1804.      Outlets: delegate 
  1805.  
  1806.  
  1807. ΓòÉΓòÉΓòÉ 8.17. Static ΓòÉΓòÉΓòÉ
  1808.  
  1809.      Actions: --- 
  1810.      Commands: --- 
  1811.      Outlets: delegate 
  1812.  
  1813.  
  1814. ΓòÉΓòÉΓòÉ 8.18. StdDialog ΓòÉΓòÉΓòÉ
  1815.  
  1816.      Actions: -centerOnScreen:, dismiss:, -dismissOK:, -makeKeyAndOrderFront:, 
  1817.       -performClose:, -performQuit:, -runModalFor: 
  1818.      Commands: --- 
  1819.      Outlets: clientWindow, delegate 
  1820.  
  1821.  
  1822. ΓòÉΓòÉΓòÉ 8.19. StdWindow ΓòÉΓòÉΓòÉ
  1823.  
  1824.      Actions: -centerOnScreen:, -makeKeyAndOrderFront:, -performClose:, 
  1825.       -performQuit: 
  1826.      Commands: --- 
  1827.      Outlets: clientWindow, delegate 
  1828.  
  1829.  
  1830. ΓòÉΓòÉΓòÉ 8.20. TriStateButton ΓòÉΓòÉΓòÉ
  1831.  
  1832.      Actions: --- 
  1833.      Commands: command 
  1834.      Outlets: delegate 
  1835.